# -*- coding:utf-8 -*-

'''多进程学习'''

'''Process创建进程'''
from multiprocessing import Process
import os

#子进程将要调用的方法
def run_in_process(name):
	print 'process %s(%s) is running' % (name,os.getpid())


if __name__=='__main__':
	print "parent process(%s)" % os.getpid()
	#创建子线程,只需要传入一个执行函数(target)和函数的参数(args)(可选)
	p=Process(target=run_in_process,args=('test',))
	print 'Child process will start'
	p.start()
	#等待子线程结束后才继续执行后续代码
	p.join()
	print 'parent process(%s) end' % os.getpid()
	
'''进程池Pool'''
from multiprocessing import Pool
import os,time,random

#子进程要调用的方法
def run(name):
	print 'process %s(%s) is running' % (name,os.getpid())
	start=time.time()
	time.sleep(random.random()*3)
	end=time.time()
	print 'process %s runs %.2f seconds' % (os.getpid(),(end-start))

if __name__=='__main__':
	print 'parent process(%s)' % os.getpid()
	p=Pool()
	for i in xrange(5):
		p.apply_async(run,args=(i,))
	print 'Waiting all process done...'
	p.close()#调用join()之前必须先调用close()，调用close()之后就不能继续添加新的Process了。
	p.join()
	print 'All process done'